package com.itheima.AtomicInteger;

public class Demo {
    private static volatile int count = 0;
    public static void main(String[] args) {
        for (int j = 0; j < 100; j++) {
            new Thread(()->{
                for (int i = 0; i < 1000; i++) {
                    //1,从共享数据中读取数据到本线程栈中.
                    //2,修改本线程栈中变量副本的值
                    //3,会把本线程栈中变量副本的值赋值给共享数据.
                    synchronized ("1") {
//给count++操作添加锁，那么count++操作就是临界区中的代码，
// 临界区中的代码一次只能被一个线程去执行，所以count++就变成了原子操作。
                        count++;
                        //count++ 不是一个原子性操作, 他在执行的过程中,有可能被其他线程打断
                        System.out.println("已经送了" + count + "个冰淇淋");
                    }
                }
            }).start();
        }
       /*MyAtomThread atom = new MyAtomThread();
        for (int i = 0; i < 1000; i++) {
            new Thread(atom).start();
        }*/
    }
}

class MyAtomThread implements Runnable {
    private volatile int count = 0; //送冰淇淋的数量
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            //1,从共享数据中读取数据到本线程栈中.
            //2,修改本线程栈中变量副本的值
            //3,会把本线程栈中变量副本的值赋值给共享数据.
            count++;
            System.out.println("已经送了" + count + "个冰淇淋");
        }
    }
}
